In parallel programming languages, such as High Performance Fortran (HPF), Unified Parallel C (UPC), etc., having a global view, data is placed in a virtual global space. The programmer describes exchanges of global data without considering node numbers. Also, the RAID (Redundant Arrays of Inexpensive Disks) technique permits users to treat, as one virtual piece of continuous data, pieces of data that has actually been divided and arranged over a plurality of hard disks. In the explanations below, this type of data is referred to as global data, and data that is obtained by naming a virtual multidimensional rectangle that is global data is referred to as a global array. Mapping of global data onto a node is conducted by middleware such as compilers.
Communications in a programming language of a global view includes reference to (reading) and definition of (writing) global data. Specifically, they are reference to a global array in a formula, substitution into a global array, an input/output statement related to global data, invocation of a procedure by using global data as an argument, invocation of a syntax that explicitly specifies communications, invocation of a communication library, etc. A case where files that have been distributedly arranged over nodes are to be treated as one piece of data can also be considered as reference to or definition of global data. In some cases, communications in a programming language of a global view can be expressed in a form of substitution between pieces of global data, expressed by the following FORALL syntax of Fortran.forall(j[1]=0:N[1]−1, . . . ,j[D]=0:N[D]−1)B(k′[1], . . . ,k′[V])=A(k[1], . . . ,k[U])
In the above syntax, A and B are global arrays that respectively have arbitrary numbers of dimensions U and V and that were distributed on arbitrary dimensions. The right side, A(k[1], . . . , k[U]), is data that is referred to and transmitted, while the left side, B(k′[1], . . . , k′[V]), is data received and updated. The index j=(j[1], . . . , j[D]) of the FORALL syntax is referred to as index of communication data. The subscript expressions k[u] and k′[v](u=1, . . . , U; v=1, . . . , V) are functions of j that can be described as k[u]=fu(j), k′[v]=gv(j). Actually, they are often fu(j)=k1+k3*j, which is an affine function of a single index that can be expressed also by a combination of the three subscripts k1:k2:k3 of Fortran or scalar. The D-dimensional space [N[1], . . . , N[D]] based on j is referred to as a communication data array. However, because the order of the appearing of the indexes j[1], . . . , j[D] in the FORALL syntax does not have a meaning, the order of the dimensions of the communication data array can be selected arbitrarily in such a manner that the communication is conducted at a higher speed.
Speeds of communications between nodes increase with increasing throughput (bytes/second) of the network and with decreasing latency (in units of seconds). Latency in this example is a period of time of software and hardware required for the activation and completion of communications, and is a value that basically has no relation to the amount of the data. When the amount of data communicated in one packet is n (bytes), a period of time required for one time of communication can be expressed by the equation below.T(n)=Latency+n/Throughput[second]  (equation 1)
As expressed by equation (1), it is possible to make influence of latency occupying the communication time relatively smaller by increasing the amount of data n that is communicated at one time.
Techniques described in the documents below are known.
Japanese Laid-open Patent Publication No. 9-34855
Japanese Laid-open Patent Publication No. 2005-285042